<?php
/**
 * コンポーネント：スケジュール編集モジュール
 */
require_once dirname(__FILE__) . '/../Components.php';
require_once dirname(__FILE__) . '/../AgeCheckbox/AgeCheckbox.php';
require_once dirname(__FILE__) . '/../MapSelect/MapSelect.php';
require_once dirname(__FILE__) . '/../YMap/YMap.php';
require_once dirname(__FILE__) . '/../YMap/YMapCtrl.php';
require_once APPLICATION_PATH . '/views/Mappers/ScheduleMapper.php';
require_once APPLICATION_PATH . '/views/Mappers/PlaceMapper.php';
require_once 'Request/DateTime.php';
require_once 'DateMath.php';
require_once 'Smarty/Components/hidden.php';
require_once 'Smarty/Components/selecttime.php';
require_once 'Smarty/Components/select.php';

class Components_ScheduleEdit extends Components
{
	/** テンプレートファイル名 */
	const TEMPLATE_NAME = 'ScheduleEdit.tpl';

	/** リクエストキー：対外試合有無 */
	const KEY_GAME_EXIST = 'gex';
	/** リクエストキー：プレフィックス：集合時刻 */
	const KEY_PREFIX_COLLECT = 'collect_';
	/** リクエストキー：プレフィックス：解散時刻 */
	const KEY_PREFIX_BREAK = 'break_';


	/** オブジェクト：日付リクエスト */
	protected $_objRequestDateTime;
	/** オブジェクト：日付計算 */
	protected $_objDateMath;
	/** オブジェクト：ＨＩＤＤＥＮコンポーネント */
	protected $_objHidden;
	/** オブジェクト：学年選択チェックボックス */
	protected $_objAgeCheckbox;
	/** オブジェクト：対外試合チェックボックス */
	protected $_objGameExistsCheckbox;
	/** オブジェクト：集合時刻メニュー */
	protected $_objCollectTimeMenu;
	/** オブジェクト：解散時刻メニュー */
	protected $_objBreakTimeMenu;
	/** オブジェクト：地図選択メニュー */
	protected $_objMapSelectMenu;
	/** オブジェクト：Ｙ！地図 */
	protected $_objYMap;
	/** オブジェクト：Ｙ！地図コントローラ */
	protected $_objYMapCtrl;

	/** SUBMIT遷移先ＵＲＬ */
	protected $_ActionUrl;

	/**
	* コンストラクタ
	* Enter description here ...
	* @param unknown_type $sCompileId 中間ファイルＩＤ
	*/
	public function __construct($sCompileId, $KindSchol, $ActionUrl)
	{
		$sTemplateDir = dirname(__FILE__);
		parent::__construct($sTemplateDir, $sCompileId);

		/*** サブミット遷移先設定 */
		$this->_ActionUrl = $ActionUrl;

		/*** 日付リクエストオブジェクト初期化 */
		$this->_objRequestDateTime = new Lib_Request_DateTime();

		/*** ＨＩＤＤＥＮコンポーネント初期化 */
		$this->_initHidden();

		/** 学年選択チェックボックス初期化 */
		$this->_objAgeCheckbox = new Components_SimpleAgeCheckBox($KindSchol);

		/** 対外試合チェックボックスコンポーネント初期化 */
		$this->_initGameExistsCheckbox();

		/** 集合解散時刻メニュー初期化 */
		$this->_initCollectBreakTimeMinu();

		/** 地図選択メニュー初期化 */
		$this->_initSelectMap();

		/** Ｙ！地図初期化 */
		$this->_initYMap();

		/** Y!地図コントローラ初期化 */
		$this->_initYMapCtrl();
	}

	/**
	 * HTML文生成
	 * @see Smarty_Components::fetch()
	 */
	public function fetch()
	{
		$this->view->MapDispFlg = 'none';
		$this->view->MapSelectDispFlg = 'block';
		$this->view->NewMapChecked ='';
		if ( $this->_objRequestDateTime->get('newmap') == 'on' ) {
			$this->view->MapDispFlg = 'block';
			$this->view->MapSelectDispFlg = 'none';
			$this->view->NewMapChecked = 'checked';
		}
		$this->view->YMD = $this->_createYMD();
		$this->view->HiddenBlock = $this->_objHidden->fetch();
		$this->view->Checkbox_Age = $this->_objAgeCheckbox->fetch();
		$this->view->ID = $this->_objRequestDateTime->get(Lib_Request::KEY_ID);
		$this->view->Checkbox_GameExists = $this->_objGameExistsCheckbox->fetch();
		$this->view->Menu_CorectTime = $this->_objCollectTimeMenu->fetch();
		$this->view->Menu_BreakTime = $this->_objBreakTimeMenu->fetch();
		$this->view->Select_Map = $this->_objMapSelectMenu->fetch();
		$this->view->YMap = $this->_objYMap->fetch();
		$this->view->YMapCtrl = $this->_objYMapCtrl->fetch();
		$this->view->ActionUrll = $this->_ActionUrl;

		$sHtml = parent::fetch(self::TEMPLATE_NAME);
		return $sHtml;
	}

	/**
	 * 年月日ラベルを作成する
	 * Enter description here ...
	 */
	protected function _createYMD()
	{
		$sYear = $this->_objRequestDateTime->getYear();
		$sMonth = $this->_objRequestDateTime->getMonth();
		$sDay = $this->_objRequestDateTime->getDay();

		$uTime = mktime(12,0,0,$sMonth, $sDay, $sYear);
		$objDateMath = new DateMath($uTime, TRUE);
		$iDayOfWeek = $objDateMath->getDayOfWeek();
		$sDayOfWeek = $objDateMath->aryDayOfWeekJp[$iDayOfWeek];

		$sRet = $sYear . '年' . $sMonth . '月' . $sDay . '日' . '（' . $sDayOfWeek . '）';
		return $sRet;
	}

	/**
	 * ＨＩＤＤＥＮコンポーネント初期化
	 * Enter description here ...
	 */
	protected function _initHidden()
	{
		$this->_objHidden = new SmartyComponents_Hidden(
		$this->_sCompileDir,
		$this->_sCompileId
		);

		$this->_objHidden->addInfo(Lib_Request_DateTime::KEY_YEAR, $this->_objRequestDateTime->getYear());
		$this->_objHidden->addInfo(Lib_Request_DateTime::KEY_MONTH, $this->_objRequestDateTime->getMonth());
		$this->_objHidden->addInfo(Lib_Request_DateTime::KEY_DAY, $this->_objRequestDateTime->getDay());
		$this->_objHidden->addInfo(Lib_Request::KEY_ID, $this->_objRequestDateTime->get(Lib_Request::KEY_ID));
	}

	/**
	 * 対外試合チェックボックス初期化
	 * Enter description here ...
	 */
	protected function _initGameExistsCheckbox()
	{
		$this->_objGameExistsCheckbox = new SmartyComponents_Checkbox($this->_sCompileDir, $this->_sCompileId);
		$this->_objGameExistsCheckbox->sName = self::KEY_GAME_EXIST;
		$this->_objGameExistsCheckbox->sSelected = $this->_objRequestDateTime->get(self::KEY_GAME_EXIST);
		$this->_objGameExistsCheckbox->aryOptions = array('1'=>'対外試合有り');
	}

	/**
	 * 集合解散時刻メニュー初期化
	 * Enter description here ...
	 */
	protected function _initCollectBreakTimeMinu()
	{
		$this->_objCollectTimeMenu
		= new Smarty_Components_SelectTime(
				$this->_sCompileDir,
				$this->_sCompileId,
				self::KEY_PREFIX_COLLECT
		);

		$this->_objBreakTimeMenu
		= new Smarty_Components_SelectTime(
				$this->_sCompileDir,
				$this->_sCompileId.'0',
				self::KEY_PREFIX_BREAK
		);
	}

	/**
	 * 地図選択メニューコンポーネント初期化
	 * Enter description here ...
	 */
	protected function _initSelectMap()
	{
		$aryOptions = array("01"=>'これ', "02"=>'あれ');
		$this->_objMapSelectMenu
		= new Smarty_Components_Select(
				$this->_sCompileDir,
				$this->_sCompileId,
				Mapper_Place::KEY_MAPID,
				$aryOptions);

		$this->_objMapSelectMenu
		= new Components_MapSelect($this->_sCompileId);
	}

	/**
	 * Ｙ！地図コンポーネント初期化
	 * Enter description here ...
	 */
	protected function _initYMap()
	{
		$this->_objYMap = new Components_Ymap_Controller($this->_sCompileId);
	}

	/**
	 * Ｙ！地図コントローラコンポーネント初期化
	 * Enter description here ...
	 */
	protected function _initYMapCtrl()
	{
		$this->_objYMapCtrl = new Components_YMapCtrl($this->_sCompileId, 'schedue_edit');
	}
}